Traditional routers have been CPU-based with all the processing being done by software. A conventional router receives an IP packet on an incoming link, performs a route table lookup to decide the next hop based on the destination address carried in the header, and forwards the packet on the appropriate outgoing link to the next node on the path. This process is essentially hop-by-hop Layer 3 store-and-forward routing, and is independent of the underlying data link layer (Layer 2).
In addition, routers that are required to support differentiated services must be able to process more than the destination address of the packet, including for example the source address, the protocol type, the protocol port numbers if available, the Type-of-Service bits etc. Such routers must be also capable of processing all packets as they arrive without requiring any storing of packets before processing for every type of packet arrivals, irrespective of the size of the packets or the information in the packet headers.